0x610160604052348015610010575f80fd5b5060405161286138038061286183398181016040528101906100329190610495565b6040518060400160405280600581526020017f50414e4441000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250836040518060400160405280600581526020017f50414e44410000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f504e440000000000000000000000000000000000000000000000000000000000815250816003908161011b91906106fa565b50806004908161012b91906106fa565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361019e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161019591906107d8565b60405180910390fd5b6101ad8161025f60201b60201c565b506101c260068361032260201b90919060201c565b61012081815250506101de60078261032260201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061021b61036f60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505050610982565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6020835110156103435761033c836103c960201b60201c565b9050610369565b826103538361042e60201b60201c565b5f01908161036191906106fa565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016103ae959493929190610818565b60405160208183030381529060405280519060200120905090565b5f80829050601f8151111561041557826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040161040c91906108cf565b60405180910390fd5b8051816104219061091c565b5f1c175f1b915050919050565b5f819050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6104648261043b565b9050919050565b6104748161045a565b811461047e575f80fd5b50565b5f8151905061048f8161046b565b92915050565b5f602082840312156104aa576104a9610437565b5b5f6104b784828501610481565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061053b57607f821691505b60208210810361054e5761054d6104f7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105b07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610575565b6105ba8683610575565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6105fe6105f96105f4846105d2565b6105db565b6105d2565b9050919050565b5f819050919050565b610617836105e4565b61062b61062382610605565b848454610581565b825550505050565b5f90565b61063f610633565b61064a81848461060e565b505050565b5b8181101561066d576106625f82610637565b600181019050610650565b5050565b601f8211156106b25761068381610554565b61068c84610566565b8101602085101561069b578190505b6106af6106a785610566565b83018261064f565b50505b505050565b5f82821c905092915050565b5f6106d25f19846008026106b7565b1980831691505092915050565b5f6106ea83836106c3565b9150826002028217905092915050565b610703826104c0565b67ffffffffffffffff81111561071c5761071b6104ca565b5b6107268254610524565b610731828285610671565b5f60209050601f831160018114610762575f8415610750578287015190505b61075a85826106df565b8655506107c1565b601f19841661077086610554565b5f5b8281101561079757848901518255600182019150602085019450602081019050610772565b868310156107b457848901516107b0601f8916826106c3565b8355505b6001600288020188555050505b505050505050565b6107d28161045a565b82525050565b5f6020820190506107eb5f8301846107c9565b92915050565b5f819050919050565b610803816107f1565b82525050565b610812816105d2565b82525050565b5f60a08201905061082b5f8301886107fa565b61083860208301876107fa565b61084560408301866107fa565b6108526060830185610809565b61085f60808301846107c9565b9695505050505050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6108a1826104c0565b6108ab8185610869565b93506108bb818560208601610879565b6108c481610887565b840191505092915050565b5f6020820190508181035f8301526108e78184610897565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f61091382516107f1565b80915050919050565b5f610926826108ef565b82610930846108f9565b905061093b81610908565b9250602082101561097b576109767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610575565b831692505b5050919050565b60805160a05160c05160e051610100516101205161014051611e8e6109d35f395f610d4f01525f610d1401525f61124801525f61122701525f610a4901525f610a9f01525f610ac80152611e8e5ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c8063715018a6116100a057806395d89b411161006f57806395d89b41146102ad578063a9059cbb146102cb578063d505accf146102fb578063dd62ed3e14610317578063f2fde38b1461034757610109565b8063715018a6146102315780637ecebe001461023b57806384b0196e1461026b5780638da5cb5b1461028f57610109565b8063313ce567116100dc578063313ce567146101a95780633644e515146101c757806340c10f19146101e557806370a082311461020157610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b610115610363565b60405161012291906116fe565b60405180910390f35b610145600480360381019061014091906117af565b6103f3565b6040516101529190611807565b60405180910390f35b610163610415565b604051610170919061182f565b60405180910390f35b610193600480360381019061018e9190611848565b61041e565b6040516101a09190611807565b60405180910390f35b6101b161044c565b6040516101be91906118b3565b60405180910390f35b6101cf610454565b6040516101dc91906118e4565b60405180910390f35b6101ff60048036038101906101fa91906117af565b610462565b005b61021b600480360381019061021691906118fd565b610478565b604051610228919061182f565b60405180910390f35b6102396104bd565b005b610255600480360381019061025091906118fd565b6104d0565b604051610262919061182f565b60405180910390f35b6102736104e1565b6040516102869796959493929190611a28565b60405180910390f35b610297610586565b6040516102a49190611aaa565b60405180910390f35b6102b56105ae565b6040516102c291906116fe565b60405180910390f35b6102e560048036038101906102e091906117af565b61063e565b6040516102f29190611807565b60405180910390f35b61031560048036038101906103109190611b17565b610660565b005b610331600480360381019061032c9190611bb4565b6107a5565b60405161033e919061182f565b60405180910390f35b610361600480360381019061035c91906118fd565b610827565b005b60606003805461037290611c1f565b80601f016020809104026020016040519081016040528092919081815260200182805461039e90611c1f565b80156103e95780601f106103c0576101008083540402835291602001916103e9565b820191905f5260205f20905b8154815290600101906020018083116103cc57829003601f168201915b5050505050905090565b5f806103fd6108ab565b905061040a8185856108b2565b600191505092915050565b5f600254905090565b5f806104286108ab565b90506104358582856108c4565b610440858585610956565b60019150509392505050565b5f6012905090565b5f61045d610a46565b905090565b61046a610afc565b6104748282610b83565b5050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104c5610afc565b6104ce5f610c02565b565b5f6104da82610cc5565b9050919050565b5f6060805f805f60606104f2610d0b565b6104fa610d46565b46305f801b5f67ffffffffffffffff81111561051957610518611c4f565b5b6040519080825280602002602001820160405280156105475781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105bd90611c1f565b80601f01602080910402602001604051908101604052809291908181526020018280546105e990611c1f565b80156106345780601f1061060b57610100808354040283529160200191610634565b820191905f5260205f20905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b5f806106486108ab565b9050610655818585610956565b600191505092915050565b834211156106a557836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161069c919061182f565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106d38c610d81565b896040516020016106e996959493929190611c7c565b6040516020818303038152906040528051906020012090505f61070b82610dd4565b90505f61071a82878787610ded565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461078e57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610785929190611cdb565b60405180910390fd5b6107998a8a8a6108b2565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61082f610afc565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361089f575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108969190611aaa565b60405180910390fd5b6108a881610c02565b50565b5f33905090565b6108bf8383836001610e1b565b505050565b5f6108cf84846107a5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109505781811015610941578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161093893929190611d02565b60405180910390fd5b61094f84848484035f610e1b565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109c6575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109bd9190611aaa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a36575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a2d9190611aaa565b60405180910390fd5b610a41838383610fea565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610ac157507f000000000000000000000000000000000000000000000000000000000000000046145b15610aee577f00000000000000000000000000000000000000000000000000000000000000009050610af9565b610af6611203565b90505b90565b610b046108ab565b73ffffffffffffffffffffffffffffffffffffffff16610b22610586565b73ffffffffffffffffffffffffffffffffffffffff1614610b8157610b456108ab565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b789190611aaa565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bf3575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610bea9190611aaa565b60405180910390fd5b610bfe5f8383610fea565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610d4160067f000000000000000000000000000000000000000000000000000000000000000061129890919063ffffffff16565b905090565b6060610d7c60077f000000000000000000000000000000000000000000000000000000000000000061129890919063ffffffff16565b905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610de6610de0610a46565b83611345565b9050919050565b5f805f80610dfd88888888611385565b925092509250610e0d828261146c565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e8b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e829190611aaa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610efb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ef29190611aaa565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610fe4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fdb919061182f565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361103a578060025f82825461102e9190611d64565b92505081905550611108565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156110c3578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110ba93929190611d02565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361114f578060025f8282540392505081905550611199565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111f6919061182f565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161127d959493929190611d97565b60405160208183030381529060405280519060200120905090565b606060ff5f1b83146112b4576112ad836115ce565b905061133f565b8180546112c090611c1f565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec90611c1f565b80156113375780601f1061130e57610100808354040283529160200191611337565b820191905f5260205f20905b81548152906001019060200180831161131a57829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156113c1575f600385925092509250611462565b5f6001888888886040515f81526020016040526040516113e49493929190611de8565b6020604051602081039080840390855afa158015611404573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611455575f60015f801b93509350935050611462565b805f805f1b935093509350505b9450945094915050565b5f600381111561147f5761147e611e2b565b5b82600381111561149257611491611e2b565b5b03156115ca57600160038111156114ac576114ab611e2b565b5b8260038111156114bf576114be611e2b565b5b036114f6576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561150a57611509611e2b565b5b82600381111561151d5761151c611e2b565b5b0361156157805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611558919061182f565b60405180910390fd5b60038081111561157457611573611e2b565b5b82600381111561158757611586611e2b565b5b036115c957806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016115c091906118e4565b60405180910390fd5b5b5050565b60605f6115da83611640565b90505f602067ffffffffffffffff8111156115f8576115f7611c4f565b5b6040519080825280601f01601f19166020018201604052801561162a5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f811115611685576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6116d08261168e565b6116da8185611698565b93506116ea8185602086016116a8565b6116f3816116b6565b840191505092915050565b5f6020820190508181035f83015261171681846116c6565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61174b82611722565b9050919050565b61175b81611741565b8114611765575f80fd5b50565b5f8135905061177681611752565b92915050565b5f819050919050565b61178e8161177c565b8114611798575f80fd5b50565b5f813590506117a981611785565b92915050565b5f80604083850312156117c5576117c461171e565b5b5f6117d285828601611768565b92505060206117e38582860161179b565b9150509250929050565b5f8115159050919050565b611801816117ed565b82525050565b5f60208201905061181a5f8301846117f8565b92915050565b6118298161177c565b82525050565b5f6020820190506118425f830184611820565b92915050565b5f805f6060848603121561185f5761185e61171e565b5b5f61186c86828701611768565b935050602061187d86828701611768565b925050604061188e8682870161179b565b9150509250925092565b5f60ff82169050919050565b6118ad81611898565b82525050565b5f6020820190506118c65f8301846118a4565b92915050565b5f819050919050565b6118de816118cc565b82525050565b5f6020820190506118f75f8301846118d5565b92915050565b5f602082840312156119125761191161171e565b5b5f61191f84828501611768565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61195c81611928565b82525050565b61196b81611741565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6119a38161177c565b82525050565b5f6119b4838361199a565b60208301905092915050565b5f602082019050919050565b5f6119d682611971565b6119e0818561197b565b93506119eb8361198b565b805f5b83811015611a1b578151611a0288826119a9565b9750611a0d836119c0565b9250506001810190506119ee565b5085935050505092915050565b5f60e082019050611a3b5f83018a611953565b8181036020830152611a4d81896116c6565b90508181036040830152611a6181886116c6565b9050611a706060830187611820565b611a7d6080830186611962565b611a8a60a08301856118d5565b81810360c0830152611a9c81846119cc565b905098975050505050505050565b5f602082019050611abd5f830184611962565b92915050565b611acc81611898565b8114611ad6575f80fd5b50565b5f81359050611ae781611ac3565b92915050565b611af6816118cc565b8114611b00575f80fd5b50565b5f81359050611b1181611aed565b92915050565b5f805f805f805f60e0888a031215611b3257611b3161171e565b5b5f611b3f8a828b01611768565b9750506020611b508a828b01611768565b9650506040611b618a828b0161179b565b9550506060611b728a828b0161179b565b9450506080611b838a828b01611ad9565b93505060a0611b948a828b01611b03565b92505060c0611ba58a828b01611b03565b91505092959891949750929550565b5f8060408385031215611bca57611bc961171e565b5b5f611bd785828601611768565b9250506020611be885828601611768565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c3657607f821691505b602082108103611c4957611c48611bf2565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611c8f5f8301896118d5565b611c9c6020830188611962565b611ca96040830187611962565b611cb66060830186611820565b611cc36080830185611820565b611cd060a0830184611820565b979650505050505050565b5f604082019050611cee5f830185611962565b611cfb6020830184611962565b9392505050565b5f606082019050611d155f830186611962565b611d226020830185611820565b611d2f6040830184611820565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d6e8261177c565b9150611d798361177c565b9250828201905080821115611d9157611d90611d37565b5b92915050565b5f60a082019050611daa5f8301886118d5565b611db760208301876118d5565b611dc460408301866118d5565b611dd16060830185611820565b611dde6080830184611962565b9695505050505050565b5f608082019050611dfb5f8301876118d5565b611e0860208301866118a4565b611e1560408301856118d5565b611e2260608301846118d5565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220f1fa8cf4aa2611df5c72b2ead87a905cc4cb60aa03d82a8be8a1f64f37af5a3c64736f6c634300081900330000000000000000000000003935da6b91c57eaebdda7676eb9cde9d0a33cfb9