0x608060405234801562000010575f80fd5b506200001b62000021565b620000df565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614620000dd575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614e6780620000ed5f395ff3fe608060405260043610610392575f3560e01c806373bd07b7116101de578063b837dbe911610108578063d547741f1161009d578063e196fb5d1161006d578063e196fb5d14610adf578063e97a1e9e14610afe578063f5b541a614610b31578063f9f4828414610b64575f80fd5b8063d547741f14610a58578063d5d4b83514610a77578063d630280f14610a8d578063d84f91e814610aac575f80fd5b8063c1dc0f07116100d8578063c1dc0f07146109e0578063c2116974146109f5578063cc5782f614610a14578063cd9b9e9a14610a42575f80fd5b8063b837dbe914610955578063bc61e7331461096a578063bf3e750514610998578063c0729ab1146109cb575f80fd5b80639ee8b2111161017e578063ac1eff681161014e578063ac1eff68146108d6578063ad422ff014610918578063aea4f7451461092d578063b4a5a4b714610941575f80fd5b80639ee8b2111461087d5780639f3ce55a1461089c578063a217fddf146108af578063abd6230d146108c2575f80fd5b80638be745d1116101b95780638be745d1146107d4578063914e57eb1461080057806391d148541461082c578063986fcddd146107c1575f80fd5b806373bd07b71461040f5780637a776315146107a25780637d1e8c55146107c1575f80fd5b80634cdd389b116102bf5780636078bfd81161025f57806367e404ce1161022f57806367e404ce1461070e578063695378f5146107595780636a637967146105625780636e6738431461076f575f80fd5b80636078bfd81461066b57806360e83cf3146106975780636463fb2a146106c357806366f96e98146106e2575f80fd5b8063587944561161029a57806358794456146105ff5780635b7eb4bd146105625780635c721a0c146106145780635ed73ceb1461063f575f80fd5b80634cdd389b146105955780635355420e146105c1578063557eac73146105e0575f80fd5b80632c70645c1161033557806336568abe1161030557806336568abe146105185780633fc08b651461053757806348922ab714610562578063491e093614610576575f80fd5b80632c70645c146104a55780632d3c12e5146104bb5780632f2ff15d146104da5780633631b669146104f9575f80fd5b806311314d0f1161037057806311314d0f1461040f5780631e2ff94f146104355780631f443da01461044b578063248a9ca314610477575f80fd5b806301ffc9a71461039657806305861180146103ca5780631065a399146103ee575b5f80fd5b3480156103a1575f80fd5b506103b56103b0366004614389565b610b83565b60405190151581526020015b60405180910390f35b3480156103d5575f80fd5b506103e06101bb5481565b6040519081526020016103c1565b3480156103f9575f80fd5b5061040d6104083660046143c8565b610c1b565b005b34801561041a575f80fd5b50610423600281565b60405160ff90911681526020016103c1565b348015610440575f80fd5b506103e06101185481565b348015610456575f80fd5b506103e06104653660046143e8565b6101b96020525f908152604090205481565b348015610482575f80fd5b506103e06104913660046143e8565b5f9081526065602052604090206001015490565b3480156104b0575f80fd5b506103e06101835481565b3480156104c6575f80fd5b5061040d6104d5366004614444565b610cf3565b3480156104e5575f80fd5b5061040d6104f43660046144f2565b610e35565b348015610504575f80fd5b5061040d6105133660046143e8565b610e5e565b348015610523575f80fd5b5061040d6105323660046144f2565b610f9d565b348015610542575f80fd5b506103e06105513660046143e8565b60a56020525f908152604090205481565b34801561056d575f80fd5b50610423600181565b348015610581575f80fd5b5061040d610590366004614520565b611050565b3480156105a0575f80fd5b506103e06105af3660046143e8565b6101b76020525f908152604090205481565b3480156105cc575f80fd5b5061040d6105db3660046145b0565b611380565b3480156105eb575f80fd5b5061040d6105fa3660046143e8565b61176c565b34801561060a575f80fd5b506103e060995481565b34801561061f575f80fd5b506103e061062e3660046143e8565b60a66020525f908152604090205481565b34801561064a575f80fd5b506103e06106593660046143e8565b6101ba6020525f908152604090205481565b348015610676575f80fd5b506103e06106853660046143e8565b6101b66020525f908152604090205481565b3480156106a2575f80fd5b506103e06106b13660046143e8565b6101506020525f908152604090205481565b3480156106ce575f80fd5b5061040d6106dd36600461466f565b611832565b3480156106ed575f80fd5b506103e06106fc3660046143e8565b6101b86020525f908152604090205481565b348015610719575f80fd5b5060e55473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103c1565b348015610764575f80fd5b506103e06101195481565b34801561077a575f80fd5b506103e07f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c81565b3480156107ad575f80fd5b5061040d6107bc3660046146a7565b611d2e565b3480156107cc575f80fd5b506104235f81565b3480156107df575f80fd5b506103e06107ee3660046143e8565b61011a6020525f908152604090205481565b34801561080b575f80fd5b506103e061081a3660046143e8565b61014e6020525f908152604090205481565b348015610837575f80fd5b506103b56108463660046144f2565b5f91825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b348015610888575f80fd5b506103b56108973660046143e8565b611e80565b61040d6108aa3660046146de565b611ea3565b3480156108ba575f80fd5b506103e05f81565b3480156108cd575f80fd5b50610423600381565b3480156108e1575f80fd5b506107346108f03660046143e8565b61011b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015610923575f80fd5b506103e060985481565b348015610938575f80fd5b5061040d612010565b34801561094c575f80fd5b50610423600481565b348015610960575f80fd5b506103e060e45481565b348015610975575f80fd5b506103b56109843660046143c8565b60da54600160ff9092169190911b16151590565b3480156109a3575f80fd5b506103e07f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8281565b3480156109d6575f80fd5b506103e0609a5481565b3480156109eb575f80fd5b506103e060975481565b348015610a00575f80fd5b5061040d610a0f366004614736565b61206b565b348015610a1f575f80fd5b506103b5610a2e3660046143e8565b60d96020525f908152604090205460ff1681565b348015610a4d575f80fd5b506103e06101bd5481565b348015610a63575f80fd5b5061040d610a723660046144f2565b612198565b348015610a82575f80fd5b506103e06101bc5481565b348015610a98575f80fd5b5061040d610aa7366004614777565b6121bc565b348015610ab7575f80fd5b506103e07f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a2681565b348015610aea575f80fd5b5061040d610af93660046143c8565b6124b5565b348015610b09575f80fd5b506103e07f4f64fe1ce613546d34d666d8258c13c6296820fd13114d784203feb91276e83881565b348015610b3c575f80fd5b506103e07f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b348015610b6f575f80fd5b5061040d610b7e3660046147e5565b612560565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610c1557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26610c458161258b565b60da54600160ff84161b16610c90576040517fb015579f00000000000000000000000000000000000000000000000000000000815260ff831660048201526024015b60405180910390fd5b60da8054600160ff851690811b199091169091557fef04ba2036ccaeab3a59717b51d2b9146b0b0904077177f1148a5418bf1eae23335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a25050565b6004610cfe81612595565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610d288161258b565b5f4980610d61576040517fa0feae8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018810610dba576040517f32bdd92500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08b013560208083019190915281830184905282518083038401815260609092019092528051910120610e00610dfa368c90038c018c61484c565b8361261b565b610e0f82828b8b8b8b8b612856565b610e29818a84610e24368f90038f018f61484c565b612a27565b50505050505050505050565b5f82815260656020526040902060010154610e4f8161258b565b610e598383612b5d565b505050565b5f54600390610100900460ff16158015610e7e57505f5460ff8083169116105b610f0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c87565b5f80546101bd8490557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316908117610100177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81163314611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610c87565b61104c8282612c4f565b5050565b611058612d08565b85878484875f5a905061106b6003612595565b5f8e8e8e8e8b8e8e6040516020016110899796959493929190614930565b6040516020818303038152906040528051906020012090506110aa81612d7b565b6110bc6110b78d8f6149b5565b612dd5565b8e60e55f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f808f73ffffffffffffffffffffffffffffffffffffffff168e8d8d6040516111269291906149c8565b5f6040518083038185875af1925050503d805f8114611160576040519150601f19603f3d011682016040523d82523d5f602084013e611165565b606091505b5091509150816111cf5780511561117f5780518082602001fd5b8f6040517f54613443000000000000000000000000000000000000000000000000000000008152600401610c87919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60e580547fffffffffffffffffffffffff00000000000000000000000000000000000000001663075bcd1517905560405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e905f90a250508615905061136657855f8490036112b557853b1580156112b3573a5a61125161bc7c866149b5565b61125b91906149d7565b61126591906149ea565b9150818811156112af5773ffffffffffffffffffffffffffffffffffffffff87166108fc611293848b6149d7565b6040518115909202915f818181858888f19350505050506112b3565b8791505b505b5f73ffffffffffffffffffffffffffffffffffffffff8416156112d857836112da565b335b90505f8173ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050905080611362576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610c87565b5050505b505050505050611376600160a755565b5050505050505050565b5f54610100900460ff161580801561139e57505f54600160ff909116105b806113b75750303b1580156113b757505f5460ff166001145b611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c87565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561149f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff88166114ec576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b858110156115c3575f87878381811061150957611509614a01565b905060200201602081019061151e9190614a2e565b73ffffffffffffffffffffffffffffffffffffffff160361156b576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115bb7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298888848181106115a1576115a1614a01565b90506020020160208101906115b69190614a2e565b612b5d565b6001016114ee565b506115ce5f88612b5d565b6115f87f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c88612b5d565b611600612e51565b61160c87888686612ef1565b7f033d11f27e62ab919708ec716731da80d261a6e4253259b7acde9bf89d28ec1880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556101198990555f89815261011a6020908152604082208c90559080527f731f3ee9e6d4d973a9db2cd906af646e8361f7be89e984c5d3f716864957e9368b90556101b890527f4f64fe1ce613546d34d666d8258c13c6296820fd13114d784203feb91276e8387fcad30177c4c23bf7ff6cfa6d7eed724357d58710018c138bfe23278ca5288b4e8190556101bd556101188290558015610e29575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d826117968161258b565b5f805f4260995410156117bb576097546117b090426149b5565b6099555060016117cd565b609a548510156117cd57849250600191505b609885905580806117db5750815b156117e657609a8390555b60408051868152831515602082015282151581830152905133917fbc3dc0cb5c15c51c81316450d44048838bb478b9809447d01c766a06f3e9f2c8919081900360600190a25050505050565b61183a612d08565b60a0810180359061184e9060808401614a2e565b61185c610120840184614a49565b61186d610100860160e08701614a2e565b5f5a905061187b6003612595565b6101008701355f9081526101506020526040812054908190036118ca576040517f4e68667500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118d48880614aaa565b9050811461192357806118e78980614aaa565b6040517f5e3fd6ad0000000000000000000000000000000000000000000000000000000081526004810193909352602483015250604401610c87565b61193088602001356130d0565b6119456110b760c08a013560a08b01356149b5565b5f61195660808a0160608b01614a2e565b61196660a08b0160808c01614a2e565b60a08b013560c08c013560208d01356119836101208f018f614a49565b6040516020016119999796959493929190614930565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506119fa816119df8b80614aaa565b6119ef60608e0160408f01614b0e565b8d6101000135613148565b611a30576040517fb05e92fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a4060808a0160608b01614a2e565b60e580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790555f80611a9760a08c0160808d01614a2e565b73ffffffffffffffffffffffffffffffffffffffff1660c08c0135611ac06101208e018e614a49565b604051611ace9291906149c8565b5f6040518083038185875af1925050503d805f8114611b08576040519150601f19603f3d011682016040523d82523d5f602084013e611b0d565b606091505b509150915081611b8257805115611b275780518082602001fd5b611b3760a08c0160808d01614a2e565b6040517f5461344300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610c87565b60e580547fffffffffffffffffffffffff00000000000000000000000000000000000000001663075bcd1517905560405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e905f90a2505050505f861115611d1b57855f849003611c6a57853b158015611c68573a5a611c0661bc7c866149b5565b611c1091906149d7565b611c1a91906149ea565b915081881115611c645773ffffffffffffffffffffffffffffffffffffffff87166108fc611c48848b6149d7565b6040518115909202915f818181858888f1935050505050611c68565b8791505b505b5f73ffffffffffffffffffffffffffffffffffffffff841615611c8d5783611c8f565b335b90505f8173ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050905080611d17576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610c87565b5050505b505050505050611d2b600160a755565b50565b6004611d3981612595565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929611d638161258b565b611d7060c0840184614a49565b90505f03611daa576040517fc01eab5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060c00160405280855f01358152602001856020013581526020018560400135815260200185606001358152602001856080013581526020018560a0013581525090505f848060c00190611e029190614a49565b604051611e109291906149c8565b60405180910390209050611e24828261261b565b6040805160a0870135602080830191909152818301849052825180830384018152606090920190925280519101205f611e69611e6360c0890189614a49565b846131dc565b9050611e7782828587612a27565b50505050505050565b600881901c5f90815261014f6020526040812054600160ff84161b161515610c15565b6002611eae81612595565b73ffffffffffffffffffffffffffffffffffffffff8516611efb576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34841115611f35576040517fb03b693200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e480545f9182611f4583614b31565b9091555090505f611f5686346149d7565b90505f33888884868a8a604051602001611f769796959493929190614930565b604051602081830303815290604052805190602001209050611f9883826132dd565b808873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe856c2b8bd4eb0027ce32eeaf595c21b0b6b4644b326e5b7bd80a1cf8db72e6c8a86888c8c604051611ffe959493929190614b68565b60405180910390a45050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8261203a8161258b565b5f609a81905560405133917fba88c025b0cbb77022c0c487beef24f759f1e4be2f51a205bc427cee19c2eaa691a250565b7f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c6120958161258b565b73ffffffffffffffffffffffffffffffffffffffff83166120e2576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815261011b602090815260409182902054915173ffffffffffffffffffffffffffffffffffffffff928316815233928592908716917f4a29db3fc6b42bda201e4b4d69ce8d575eeeba5f153509c0d0a342af0f1bd021910160405180910390a4505f90815261011b6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f828152606560205260409020600101546121b28161258b565b610e598383612c4f565b60046121c781612595565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296121f18161258b565b5f85900361222b576040517f7907d79b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610119545f81815261011a6020526040902054843514612277576040517fead4c30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101bd546040808601355f9081526101b86020522054146122e4576101bd546040858101355f9081526101b86020528190205490517f2f22b98a00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610c87565b6101bb546101bc545f6122f987856001613359565b60408051602081018390528935918101919091526080808a013560608381019190915260a0808c01359284019290925290820187905289013560c08201529091505f9060e001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528360c08a01358660e08c01356101208d013561238d6101008f018f614aaa565b60405160200161239e929190614b98565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261243a9291602001614bfa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900690506124a8818a8d8d8c3560608e013561396a565b5050505050505050505050565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a266124df8161258b565b60da54600160ff84161b1615612526576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610c87565b60da8054600160ff851690811b9091179091557fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d33610cc7565b600161256b81613b2e565b5f6125758161258b565b6101195461258484825f613359565b5050505050565b611d2b8133613b75565b60da54600160ff83161b8116156125dd576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610c87565b600281161561104c576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260016004820152602401610c87565b6040820151612656576040517f2898482a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602080830180515f9081526101b6835260408082205461011954935183526101ba909452902054826126c15784516040517fd5aa5ad6000000000000000000000000000000000000000000000000000000008152610c87918591600401918252602082015260400190565b5f6126cd8260016149b5565b90508560600151811461271c5760608601516040517fabefa5e8000000000000000000000000000000000000000000000000000000008152610c87918391600401918252602082015260400190565b828660600151116127695760608601516040517fa386ed70000000000000000000000000000000000000000000000000000000008152600481019190915260248101849052604401610c87565b8560800151866060015111156127be57606086015160808701516040517fcbbd795300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610c87565b855184146128055785516040517fd5aa5ad6000000000000000000000000000000000000000000000000000000008152610c87918691600401918252602082015260400190565b5f8581526101b660205260409020541561284e576040517f0f06cd1500000000000000000000000000000000000000000000000000000000815260048101869052602401610c87565b505050505050565b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001860695505f80600a73ffffffffffffffffffffffffffffffffffffffff16898989898989896040516020016128b29796959493929190614c28565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526128ea91614c64565b5f60405180830381855afa9150503d805f8114612922576040519150601f19603f3d011682016040523d82523d5f602084013e612927565b606091505b509150915081612963576040517fa71194af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408151146129ab578051604080517ff75db381000000000000000000000000000000000000000000000000000000008152610c879290600401918252602082015260400190565b60208101516040820151611000821415806129e657507f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018114155b156124a8576040517f68dcad5f0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610c87565b6020808201515f9081526101b8909152604090205480612a73576040517f5548c6b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0808301516040808501518151602081018690529182019290925260608101919091526080810187905290810185905260c001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120858201515f8881526101b7845284812091909155868401516101b68452848220556060870180516101b98552858320556080880180516101ba8652868420556101b890945293812082905591519251909450919286917f174b4a2e83ebebaf6824e559d2bab7b7e229c80d211e98298a1224970b719a4291a45050505050565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661104c575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055612bf13390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561104c575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600260a75403612d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c87565b600260a755565b5f81815260a66020526040902054600114612dc5576040517f992d87c300000000000000000000000000000000000000000000000000000000815260048101829052602401610c87565b5f90815260a66020526040812055565b5f426099541015612df757609754612ded90426149b5565b6099555080612e08565b81609a54612e0591906149b5565b90505b609854811115612e44576040517fa74c1c5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b609a5550565b600160a755565b5f54610100900460ff16612ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c87565b612eef613c2e565b565b5f54610100900460ff16612f87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c87565b73ffffffffffffffffffffffffffffffffffffffff8416612fd4576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316613021576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613029613cc4565b613031613cc4565b613039613cc4565b6130438282613d5a565b61306d7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8285612b5d565b6130977f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a2684612b5d565b5050600160e455505060e580547fffffffffffffffffffffffff00000000000000000000000000000000000000001663075bcd15179055565b600881901c5f90815261014f6020526040902054600160ff83161b1615613126576040517f335a4a9000000000000000000000000000000000000000000000000000000000815260048101829052602401610c87565b600881901c5f90815261014f602052604090208054600160ff84161b17905550565b5f85815b858110156131cf57600163ffffffff8616821c811690036131995761319287878381811061317c5761317c614a01565b90506020020135835f9182526020526040902090565b91506131c7565b6131c4828888848181106131af576131af614a01565b905060200201355f9182526020526040902090565b91505b60010161314c565b5090911495945050505050565b5f6131e8602084614c7f565b1561321f576040517f6426c6c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f729eebce00000000000000000000000000000000000000000000000000000000835b80156132d457602081039050808601357fff0000000000000000000000000000000000000000000000000000000000000081161561328557604051838152600481fd5b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001817f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000187870908935050613242565b50509392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015f90815261014e60208181526040808420548452848252808420868552929091528083208290555190918391839186917fea3b023b4c8680d4b4824f0143132c95476359a2bb70a81d6c5a36f6918f63399190a4505050565b5f806133686020860186614aaa565b90509050805f036133a5576040517fdcb2388500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b838560600135116133ef576040517f706144050000000000000000000000000000000000000000000000000000000081526060860135600482015260248101859052604401610c87565b6134018560e001358660c00135613ec0565b8460800135610118541461345357610118546040517f3211d9be000000000000000000000000000000000000000000000000000000008152600481019190915260808601356024820152604401610c87565b428560a001351061349c576040517fbf81c6e000000000000000000000000000000000000000000000000000000000815260a08601356004820152426024820152604401610c87565b5f6101b7816134ae6020890189614aaa565b5f8181106134be576134be614a01565b9050602002013581526020019081526020015f205490508560400135811461351f57604080517f9a89a75800000000000000000000000000000000000000000000000000000000815260048101839052908701356024820152604401610c87565b5f8181526101b6602052604090205486358114613572576040517fe1cb6e600000000000000000000000000000000000000000000000000000000081526004810182905287356024820152604401610c87565b5f6101b68161358460208b018b614aaa565b61358f6001896149d7565b81811061359e5761359e614a01565b9050602002013581526020019081526020015f205490505f801b81036135f0576040517f2898482a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101b85f61360160208b018b614aaa565b600161361060208e018e614aaa565b90500381811061362257613622614a01565b9050602002013581526020019081526020015f205494505f801b8503613674576040517f5548c6b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6136906136856101008a018a614aaa565b8a6101200135613f8d565b6136a76136a16101408a018a614a49565b89614099565b60015b848110156137bc576136bf60208a018a614aaa565b600183038181106136d2576136d2614a01565b905060200201356101b75f8b80602001906136ed9190614aaa565b858181106136fd576136fd614a01565b9050602002013581526020019081526020015f2054146137b45761372460208a018a614aaa565b6001830381811061373757613737614a01565b905060200201356101b75f8b80602001906137529190614aaa565b8581811061376257613762614a01565b9050602002013581526020019081526020015f20546040517f710cd580000000000000000000000000000000000000000000000000000000008152600401610c87929190918252602082015260400190565b6001016136aa565b505f6101b9816137cf60208c018c614aaa565b5f8181106137df576137df614a01565b9050602002013581526020019081526020015f205490505f6101ba5f8b806020019061380b9190614aaa565b61381660018b6149d7565b81811061382557613825614a01565b9050602002013581526020019081526020015f2054905089606001358114613886576040517f9f6adc690000000000000000000000000000000000000000000000000000000081526004810182905260608b01356024820152604401610c87565b6138918960016149b5565b82146138df576138a28960016149b5565b6040517fabefa5e8000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604401610c87565b60608a01355f81815261011a6020526040908190208590556101bd89905560a08c01356101185561011982905560e08c01356101bb5560c08c01356101bc555184918c35917f1335f1a2b3ff25f07f5fef07dd35d8fb4312c3c73b138e2fad9347b3319ab53c90613955908d1515815260200190565b60405180910390a45050505050509392505050565b6040805160018082528183019092525f916020808301908036833701905050905086815f8151811061399e5761399e614a01565b6020908102919091018101919091525f87815261011b909152604090205473ffffffffffffffffffffffffffffffffffffffff1680613a09576040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7e4f7a8a0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff831690637e4f7a8a90613a61908a908a908890600401614cb7565b6020604051808303815f875af1158015613a7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aa19190614d0e565b905080613ada576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815261011a60209081526040918290205482518881529182015285917f5c885a794662ebe3b08ae0874fc2c88b5343b0223ba9cd2cad92b69c0d0c901f910160405180910390a2505050505050505050565b60da54600160ff83161b1615611d2b576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff82166004820152602401610c87565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661104c57613bb481614126565b613bbf836020614145565b604051602001613bd0929190614d2d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610c8791600401614dad565b5f54610100900460ff16612e4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c87565b5f54610100900460ff16612eef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c87565b5f54610100900460ff16613df0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610c87565b815f03613e29576040517fb5ed5a3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03613e62576040517fd10d72bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60978290556098819055613e7682426149b5565b60998190556097546098546040805192835260208301919091528101919091527f8f805c372b66240792580418b7328c0c554ae235f0932475c51b026887fe26a990606001610f91565b815f03613f0257801561104c576040517f0c25659200000000000000000000000000000000000000000000000000000000815260048101829052602401610c87565b80613f3c576040517f5228f4c800000000000000000000000000000000000000000000000000000000815260048101839052602401610c87565b5f82815261014e6020526040902054811461104c576040517f36459fa00000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610c87565b5f5b82811015614093576101505f858584818110613fad57613fad614a01565b9050602002013581526020019081526020015f20545f1461401657838382818110613fda57613fda614a01565b905060200201356040517fe5d14425000000000000000000000000000000000000000000000000000000008152600401610c8791815260200190565b816101505f86868581811061402d5761402d614a01565b9050602002013581526020019081526020015f20819055508184848381811061405857614058614a01565b905060200201357f300e6f978eee6a4b0bba78dd8400dc64fd5652dbfc868a2258e16d0977be222b60405160405180910390a3600101613f8f565b50505050565b6140a4600283614c7f565b156140de576040517f0c91d77600000000000000000000000000000000000000000000000000000000815260048101839052602401610c87565b5f805b83811015612584576040518582013560f01c9250838301907f3c116827db9db3a30c1a25db8b0ee4bab9d2b223560209cfd839601b621c726d905f90a26002016140e1565b6060610c1573ffffffffffffffffffffffffffffffffffffffff831660145b60605f6141538360026149ea565b61415e9060026149b5565b67ffffffffffffffff8111156141765761417661481f565b6040519080825280601f01601f1916602001820160405280156141a0576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f815181106141d6576141d6614a01565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061423857614238614a01565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6142728460026149ea565b61427d9060016149b5565b90505b6001811115614319577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106142be576142be614a01565b1a60f81b8282815181106142d4576142d4614a01565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c9361431281614dfd565b9050614280565b508315614382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c87565b9392505050565b5f60208284031215614399575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114614382575f80fd5b5f602082840312156143d8575f80fd5b813560ff81168114614382575f80fd5b5f602082840312156143f8575f80fd5b5035919050565b5f8083601f84011261440f575f80fd5b50813567ffffffffffffffff811115614426575f80fd5b60208301915083602082850101111561443d575f80fd5b9250929050565b5f805f805f8086880361012081121561445b575f80fd5b60c0811215614468575f80fd5b5086955060c0870135945060e087013567ffffffffffffffff8082111561448d575f80fd5b6144998a838b016143ff565b90965094506101008901359150808211156144b2575f80fd5b506144bf89828a016143ff565b979a9699509497509295939492505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d2b575f80fd5b5f8060408385031215614503575f80fd5b823591506020830135614515816144d1565b809150509250929050565b5f805f805f805f8060e0898b031215614537575f80fd5b8835614542816144d1565b97506020890135614552816144d1565b965060408901359550606089013594506080890135614570816144d1565b935060a089013567ffffffffffffffff81111561458b575f80fd5b6145978b828c016143ff565b999c989b50969995989497949560c00135949350505050565b5f805f805f805f805f6101008a8c0312156145c9575f80fd5b8935985060208a0135975060408a01356145e2816144d1565b965060608a01356145f2816144d1565b955060808a013567ffffffffffffffff8082111561460e575f80fd5b818c0191508c601f830112614621575f80fd5b81358181111561462f575f80fd5b8d60208260051b8501011115614643575f80fd5b9a9d999c50979a96996020919091019890975060a08701359660c0810135965060e00135945092505050565b5f6020828403121561467f575f80fd5b813567ffffffffffffffff811115614695575f80fd5b82016101408185031215614382575f80fd5b5f602082840312156146b7575f80fd5b813567ffffffffffffffff8111156146cd575f80fd5b820160e08185031215614382575f80fd5b5f805f80606085870312156146f1575f80fd5b84356146fc816144d1565b935060208501359250604085013567ffffffffffffffff81111561471e575f80fd5b61472a878288016143ff565b95989497509550505050565b5f8060408385031215614747575f80fd5b8235614752816144d1565b946020939093013593505050565b5f6101608284031215614771575f80fd5b50919050565b5f805f806060858703121561478a575f80fd5b843567ffffffffffffffff808211156147a1575f80fd5b6147ad888389016143ff565b90965094506020870135935060408701359150808211156147cc575f80fd5b506147d987828801614760565b91505092959194509250565b5f602082840312156147f5575f80fd5b813567ffffffffffffffff81111561480b575f80fd5b61481784828501614760565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c0828403121561485c575f80fd5b60405160c0810181811067ffffffffffffffff821117156148a4577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8060405250823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201528091505092915050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff808a16835280891660208401525086604083015285606083015284608083015260c060a083015261497b60c0830184866148e9565b9998505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610c1557610c15614988565b818382375f9101908152919050565b81810381811115610c1557610c15614988565b8082028115828204841417610c1557610c15614988565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215614a3e575f80fd5b8135614382816144d1565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614a7c575f80fd5b83018035915067ffffffffffffffff821115614a96575f80fd5b60200191503681900382131561443d575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614add575f80fd5b83018035915067ffffffffffffffff821115614af7575f80fd5b6020019150600581901b360382131561443d575f80fd5b5f60208284031215614b1e575f80fd5b813563ffffffff81168114614382575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b6157614b61614988565b5060010190565b858152846020820152836040820152608060608201525f614b8d6080830184866148e9565b979650505050505050565b5f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115614bc5575f80fd5b8260051b80858437919091019392505050565b5f5b83811015614bf2578181015183820152602001614bda565b50505f910152565b5f8351614c0b818460208801614bd8565b835190830190614c1f818360208801614bd8565b01949350505050565b878152866020820152856040820152838560608301375f848201606081015f815284868237505f93016060019283525090979650505050505050565b5f8251614c75818460208701614bd8565b9190910192915050565b5f82614cb2577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b604081525f614cca6040830185876148e9565b8281036020848101919091528451808352858201928201905f5b81811015614d0057845183529383019391830191600101614ce4565b509098975050505050505050565b5f60208284031215614d1e575f80fd5b81518015158114614382575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614d64816017850160208801614bd8565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614da1816028840160208801614bd8565b01602801949350505050565b602081525f8251806020840152614dcb816040850160208701614bd8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f81614e0b57614e0b614988565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea26469706673582212205733f8a4ec3487fd65dac516249287485e7f1bf9b1d1b71a9ad60a819dcc1f2d64736f6c63430008180033